<?php
 
 
define("ALERTE",1);
define("ERREUR",2);
define("OK",4);
define("INFO",8);
 
 
class Site{

		//envoie un header de redirection au navigateur
		//et quitte le script
		function redirect($url){
			header("Location: $url");
			exit();
		}
		

		 
		/**
		* affiche un message utilisateur
		*
		* $message : message affiché
		* $type : type du message (défaut INFO)
		*/
		function message($message, $type=INFO){
		 
			switch($type){
				case INFO: $class='info';break;
				case ERREUR: $class='erreur';
					$message="<b>$message</b><pre>\n".self::trace(debug_backtrace())."</pre>";
					break;
				case OK: $class='ok';break;
				case ALERTE: $class='alerte';break;
				default:$class='info';
			}
		 
			print <<< ENDOFMESSAGE
		 
				<div class='$class'>
					$message
				</div>
		 
ENDOFMESSAGE;
		}
		 
		/**
		* affiche un message de debug, avec la trace d'exécution
		*
		* $message : chaine, tableau, etc...
		*/
		function debug($message){
			echo "<pre class='debug'>";
			echo "<b>";
			print_r($message);
			echo "</b>\n";
			echo self::trace(debug_backtrace()); 
			echo "</pre>";
		}
		 
		 
		 		 
		/**
		* affiche les éventuels messages d'infos stockés
		* et les supprime
		*/
		function liste_message(){

			if(empty($_SESSION["messages"]))
				return;
			
				
			foreach($_SESSION["messages"] as $message=>$type){
				self::message($message,$type);
			}
			self::effacer_message_info();
		}
		 
		 
		/**
		* 
		*/
		function message_info($message,$type=INFO){
			$_SESSION["messages"][$message]=$type;
		}
		 
		/**
		* 
		*/
		function effacer_message_info(){
			unset($_SESSION["messages"]);
		}
		 
		
		
		
		
		/**
		* affiche la trace d'exécution courante
		*
		* $backtrace : retour d'un debug_backtrace lors de l'appel à debug
		* si NULL, inclus l'appel de debug dans la trace d'exécution
		*/
		function trace($backtrace){
		 
			$chaine='';
			if($backtrace)
				$trace=array_reverse($backtrace);
			else
				$trace=array_reverse(debug_backtrace());
			$fonction=NULL;
			$decalage='';
			foreach($trace as $appel){
		 
				$chaine.= $decalage.$appel['file'].', ligne '.$appel['line'];
				if($fonction){
					$chaine.=" : $fonction()\n";
					$decalage="  ".$decalage;
				}else{
					$decalage="  +--";
					$chaine.= "\n";
				}
		 
				$fonction=$appel['function'];
		 
			}
			return $chaine;
		}
		 
		 
 
}
?>